011774251aebfdf93a7c09c85366d1af7b970dcb,src/main/java/com/github/davidmoten/rx2/internal/flowable/FlowableCollectWhile.java,CollectWhileSubscriber,drain,#,148

Before Change


						R c = collectionToEmit;
						if (c != null) {
							collectionToEmit = null;
							child.onNext(c);
							emitted = true;
						}
					}

After Change


				while (true) {
					long r = requested.get();
					long e = 0;
					while (e != r) {
						if (cancelled) {
							// TODO GC Nepotism?
							queue.clear();
							collection = null;
							return;
						}
						R c = queue.poll();
						if (c == null) {
							if (done) {
								if (error != null) {
									Throwable err = error;
									error = null;
									child.onError(err);
									return;
								} else {
									R col = collection;
									if (col != null) {
										collection = null;
										// ensure that the remainder is emitted
										queue.offer(col);
										// loop around again
									} else {
										child.onComplete();
										return;
									}
								}
							} else {
								// nothing to emit and not done
								break;
							}
						} else {
							child.onNext(c);
							e++;
						}
					}